home *** CD-ROM | disk | FTP | other *** search
/ Mac100% 1998 November / MAC100-1998-11.ISO.7z / MAC100-1998-11.ISO / オンラインソフト定点観測 / ユーティリティ / Mops 3.2.sea / Mops 3.2 / Mops source / PPC source / qBase < prev    next >
Text File  |  1998-05-25  |  2KB  |  87 lines

  1. (*
  2.  
  3. This file is derived from Base.  It's a "q" file - it contains any
  4. defns from the original Base that:
  5.  
  6. 1. are needed to support the compilation of the PPC image on the 68k.
  7.  
  8. 2. have to be compiled BEFORE we start compiling PPC code - i.e. before
  9.     CROSS at the beginning of Setup.
  10.     
  11. So, here we only have to include words that generate 68k code, but
  12. which for some reason get EXECUTED after CROSS-time.  And of course if
  13. the definition is identical in Base, we can omit it here.
  14.  
  15. Thus we only include words which are immediate, or which get executed
  16. at compile time, AND are different from their original versions in Base
  17. (e.g. words which need to refer to CDP rather than DP).
  18.  
  19. *)
  20.  
  21. ¥ RECURSE isn't used in the target compilation, so we omit it here.
  22. ¥  See zBase.
  23.  
  24.  
  25. ¥ : CHAR    @word 1+ c@  ;                ¥ ANSI - replaces ASCII
  26. : [CHAR]    @word 1+ c@  postpone literal  ;    immediate
  27.  
  28. : &            ¥ ( -- c )  A shorter state-smart version.
  29.     @word 1+ c@
  30.     state IF  postpone literal  THEN  ;        immediate
  31.  
  32.  
  33. (*
  34. note: here in Base we forward defined BLD, the word which builds an
  35. object, which is called by the first instruction of a class dic
  36. entry.  On the PPC we'll do it via class_h, so that a class won't
  37. look like a colon definition any more.  This is a bit more logical
  38. and shouldn't cause any problems.  In any case, we couldn't use a
  39. call to BLD as a unique marker identifying a class dic entry, since
  40. calls are all self-relative on the PPC so that calls to any particular
  41. word will have a different bit pattern depending on where they are.
  42. *)
  43.  
  44.  
  45. ¥        ============ Tables, lists etc. ===============
  46.  
  47.  
  48. ¥ I don't think we use xts{ anywhere in the codegen stuff, but 
  49. ¥ if we do we'll have to redefine it here since it uses RELOC,
  50.  
  51.  
  52.  
  53. ¥ CASE can be omitted here since it's unchanged from Base while we're
  54. ¥  still generating 68k code.
  55.  
  56.  
  57. (*    TYPE{ and ENUM{ (synonyms) have to be defined here since CONSTANT has
  58.     been redefined.  We can stop after that.
  59. *)
  60.  
  61. 0    value    TYPECNT
  62.  
  63.                             
  64. : ENDLIST?        ¥ ( chr -- b )
  65.     latest n>count 1 =  down  c@ =  and
  66.     dup  IF  latest n>link  (forget)  THEN  ;
  67.  
  68.  
  69. : TYPE{  { ¥ svin -- }
  70.     0 -> typeCnt                ¥ 1st value
  71.     BEGIN
  72.         >in @  -> svin
  73.         mword count " }" s=
  74.     NWHILE
  75.         svin >in !
  76.         typeCnt  constant  1 ++> typeCnt
  77.     REPEAT
  78. ;
  79.  
  80. : ENUM{        type{  ;            ¥ C fans might like this name better
  81. : ENUM        gobble{  type{  ;
  82.  
  83.                 ¥ note we can't allow "type { ..." since "type" has another
  84.                 ¥ meaning already.  But "enum { ..."  is OK.
  85.  
  86. endload
  87.